package com.lzx.adx.report.support.strategy.v2.channel;

import cn.hutool.core.util.URLUtil;
import com.lzx.adx.report.annnotions.ProductType;
import com.lzx.adx.report.constant.ProductChannelConstant;
import com.lzx.adx.report.dto.AccountDTO;
import com.lzx.adx.report.dto.ReportDTO;
import com.lzx.adx.report.util.URLEncoderDecoderTool;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@Component
@ProductType(ProductChannelConstant.CZ)
public class CzReportStrategy extends AbstractReport {

    @Override
    public String getReportFinalUrl(ReportDTO reportDTO, AccountDTO accountDTO) {
        Map<String,Object> params=new HashMap<>();

        if(StringUtils.isNotBlank(reportDTO.getImei()) &&!StringUtils.contains(reportDTO.getImei(),"__")){
            params.put("imei", reportDTO.getImei());
        }
        if(StringUtils.isNotBlank(reportDTO.getImeiSum()) &&!StringUtils.contains(reportDTO.getImeiSum(),"__")){
            params.put("imeimd5", reportDTO.getImeiSum());
        }
        if(StringUtils.isNotBlank(reportDTO.getOaid()) &&!StringUtils.contains(reportDTO.getOaid(),"__")){
            params.put("oaid", reportDTO.getOaid());
        }
        if(StringUtils.isNotBlank(reportDTO.getHash_android_id()) &&!StringUtils.contains(reportDTO.getHash_android_id(),"__")){
            params.put("android_id", reportDTO.getHash_android_id());
        }
        if(StringUtils.isNotBlank(reportDTO.getIdfa()) &&!StringUtils.contains(reportDTO.getIdfa(),"__")){
            params.put("idfa", reportDTO.getIdfa());
        }
        if(StringUtils.isNotBlank(reportDTO.getIdfaSum()) &&!StringUtils.contains(reportDTO.getIdfaSum(),"__")){
            params.put("idfamd5", reportDTO.getIdfaSum());
        }
        if(StringUtils.isNotBlank(reportDTO.getCaid()) &&!StringUtils.contains(reportDTO.getCaid(),"__")){
            params.put("caid", reportDTO.getCaid());
        }


        params.put("ip",reportDTO.getIp());
        params.put("user_agent", URLUtil.encode(reportDTO.getUser_agent()));
        params.put("srequest_id", reportDTO.getBizRequestId());

        String callbackUrl=String.format(accountDTO.getDspCallbackUrl(),reportDTO.getBizRequestId());

        String urlParams= URLUtil.buildQuery(params, StandardCharsets.UTF_8)+"&callback="+ URLEncoderDecoderTool.encodeURL(callbackUrl);

        return accountDTO.getDspReportUrl()+"&"+urlParams;
    }
}
